package main

/* v2在v1的基础上增加了抽象  */

// 定义构造接口，表示构造目标对象必须使用的方法，属于步骤约束
type ABuilderInterface interface {
	WithBase(n string, h int)
	WithLimit(max, min int)
	WithXY(x, y int)
	CheckErr(error)
}

// 定义构造对象，使用真实对象作为属性，真实对象满足接口约束
type ABuilderV2 struct {
	build ABuilderInterface
	err   error
}

func (b ABuilderV2) Construct() {
	// 不使用链式调用（链式调用需要返回原本的对象）
	b.build.WithBase("name", 1)
	b.build.WithLimit(10, 100)
	b.build.WithXY(1, 2)
}
